/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.TipoEvaluador;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class TipoEvaluadorPeer {

	private static final String BUSCAR_TIPOEVALUADORES =
		"SELECT id_t_evaluador, descripcion FROM t_evaluador";

	private static final String BUSCAR_TIPOEVALUADOR  =	
		"SELECT id_t_evaluador, descripcion FROM t_evaluador "+
		"WHERE id_t_evaluador = &id_t_evaluador";

	private static final String INSERTAR_TIPOEVALUADOR  =
		"INSERT INTO t_evaluador(descripcion) VALUES "+
		"('&descripcion')";

	private static final String ACTUALIZAR_TIPOEVALUADOR =
		"UPDATE t_evaluador "+
		"SET descripcion = '&descripcion' "+
		"WHERE id_t_evaluador = &id_t_evaluador";

	private static final String ELIMINAR_TIPOEVALUADOR =
		"DELETE FROM t_evaluador "+
		"WHERE id_t_evaluador = &id_t_evaluador";

	
		
	/** busca en la base de datos todos los registros de la tabla "t_evaluador"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de t_evaluador
	* @see         				TipoEvaluador, Statement
	*/
	public static ArrayList<TipoEvaluador> buscarTipoEvaluadores(Statement stmt) {
		ArrayList<TipoEvaluador> t_evaluadores = new ArrayList<TipoEvaluador>();

		String sql = BUSCAR_TIPOEVALUADORES; //"SELECT id_t_evaluador, descripcion FROM t_evaluador";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					TipoEvaluador teval = new TipoEvaluador();

					teval.setIdTipoEvaluador(rs.getInt("id_t_evaluador"));
					teval.setDescripcion(rs.getString("descripcion")); 
					
					t_evaluadores.add(teval);
				}
				
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return t_evaluadores;
	}
	
	/** busca en la base de datos un registro de la tabla "t_evaluador"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param idTipoEvaluador	id de la t_evaluador que se desea cosultar
	* 
	* @return					t_evaluador buscada
	* @see         				TipoEvaluador, Statement
	*/
	public static TipoEvaluador buscarTipoEvaluador(Statement stmt, int idTipoEvaluador) {
		TipoEvaluador t_evaluador = new TipoEvaluador();

		String sql = BUSCAR_TIPOEVALUADOR;
		//"SELECT id_t_evaluador, descripcion FROM t_evaluador "+
		//"WHERE id_t_evaluador = &id_t_evaluador";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_t_evaluador", String.valueOf(idTipoEvaluador));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					t_evaluador.setIdTipoEvaluador(rs.getInt("id_t_evaluador"));
					t_evaluador.setDescripcion(rs.getString("descripcion"));
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return t_evaluador;
	}
	
	/** Inserta una TipoEvaluador en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param t_evaluador		    t_evaluador que se va a insertar en la base de datos
	 *  
	 * @return					void
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static int insertarTipoEvaluador(Statement stmt, TipoEvaluador t_evaluador) throws SQLException {
		int idNuevaTipoEvaluador = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_TIPOEVALUADOR;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&descripcion", t_evaluador.getDescripcion());
					
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaTipoEvaluador = rs.getInt("id_t_evaluador");
				Util.print("nuevo registro: " + idNuevaTipoEvaluador);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaTipoEvaluador;
	}
	

	/** Actualiza una t_evaluador en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param t_evaluador			t_evaluador que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static void actualizarTipoEvaluador(Statement stmt, TipoEvaluador t_evaluador) throws SQLException {
		String sql = ACTUALIZAR_TIPOEVALUADOR;
		 //se setean los "parametros": &id_t_evaluador, &descripcion
		sql = sql.replaceAll("&id_t_evaluador", "" + t_evaluador.getIdTipoEvaluador())
				 .replaceAll("&descripcion", t_evaluador.getDescripcion());
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un t_evaluador en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param t_evaluador		t_evaluador que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarTipoEvaluador(Statement stmt, TipoEvaluador t_evaluador) throws SQLException {
		String sql = ELIMINAR_TIPOEVALUADOR;
		// se setean los "id_t_evaluador = &id_t_evaluador";
		sql = sql.replaceAll("&id_t_evaluador", "" + t_evaluador.getIdTipoEvaluador());

		stmt.executeUpdate(sql);
	}
	
}
